package com.example.mapper;

import com.example.annotation.AutoFill;
import com.example.dto.BookDishDTO;
import com.example.entity.BookDish;
import com.example.enumeration.OperationType;
import com.example.vo.BookDishVO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;

@Mapper
public interface BookDishMapper {
    /**
     * 分页展示所有图书
     * @return
     */
    //@Select("select * from bookdish")
    Page<BookDishVO> showBook(String name,
                              Integer categoryId,
                              Integer status,
                              Integer page,
                              Integer pageSize
    );

    /**
     * 根据名字查询图书
     * @param name
     * @param page
     * @param pageSize
     * @return
     */
    Page<BookDishDTO> selectBook(String name, Integer page, Integer pageSize);

    /**
     * 删除图书
     * @param id
     */
    @Delete("delete from bookdish where id=#{id}")
    void deleteBook(Integer id);


    /**
     * 批量删除图书
     * @param ids
     */
    void deleteBooks(List<String> ids);

    /**
     * 是否售完 1为未售完 0为售完
     * @param status
     * @param id
     */
    @Update("update bookdish set status=#{status} where id=#{id}")
    void starOrStop(Integer status, Integer id);


    /**
     * 数据回显
     * @param id
     * @return
     */
    @Select("select * from bookdish where id=#{id}")
    BookDishVO getById(Long id);

    /**
     *  修改图书
     * @param bookDishDTO
     */
    @AutoFill(OperationType.UPDATE)
    void updateBook(BookDishDTO bookDishDTO);

    /**
     * 新增图书
     * @param bookDishDTO
     */
    @AutoFill(OperationType.INSERT)
    void addBook(BookDishDTO bookDishDTO);

    /**
     * 按分类id查询图书
     * @param bookDishDTO
     * @return
     */
    List<BookDishDTO> list(BookDishDTO bookDishDTO);

    /**
     *
     * 根据条件统计图书数量
     * @param map
     * @return
     */
    Integer countByMap(Map map);
}
